#/bin/bash
_help(){ 
cat << fim
Autor: 
    Ricardo Brito do Nascimento

Email: 
    britodfbr[at]gmail.com

Descrição: 
    Este script realiza o backup via repozo do plone versão 2.5.5 ou superior;
    pode ser utilizado para realizar backups de versões anteriores,
    entretanto não foi testado, e possivelmente será necessário 
    customização para funcionar adequadamente.
    Além do backup realiza controle de retenção do backup, excluindo automaticamente
    os arquivos antigos.
    
Variáveis de configuração:
    DAYS - dias de retenção;
    FILESTORAGEDIR - diretório de instalação;
    BACKUPDIR - diretório que os backups serão mantidos;
    REPOZO - plone 3.3.5 ou superior '"/opt/p335/${B}/bin/repozo"'; 
             plone 2.5.5 '`find ${FILESTORAGEDIR} -name "*repozo*" -iwholename "*bin*"`'
    EXCEPTION[n] - diretórios ou arquivos que terão validade ignorada;
Versão: 8
Execução: 
    $0; ou
    $0 -h | --help | ?
fim
}
########### Variavéis de configuração ########
DAYS=2
FILESTORAGEDIR=/opt/p255
HOSTNAME=$(/bin/hostname | /bin/awk -F. '{if (NR>0) { A=$1 } else { A=$NF }; print A}')
REPOZO=($(find $FILESTORAGEDIR -type f -iwholename "*bin*" -name "*repozo*" -print))
REMOTEHOST="192.168.22.2"
REMOTEDIR=/vol/zope_dmz
LOCALDIR=/storage
BACKUPDIR=$LOCALDIR/$HOSTNAME
BKPCONF=$LOCALDIR/conf
EXCEPTION[0]=".snapshot"
EXCEPTION[1]="arquivosAnexos"
EXCEPTION[2]="none"
EXCEPTION[3]="none"
TAR=$(which tar)
FIND=$(which find)
###########  Versão de testes ################
#${FIND} /opt/p335/*/var/filestorage/ -type f -name "*.fs" -printf '%h %f\n'|while read a b; do A=/storage-bkp/; B=$(awk -F/ '{print $4}' <<< ${a}); C=${b%.fs}; mkdir -pv ${A}/${B}/${C}; /opt/p335/${B}/bin/repozo -BFvzf ${a}/${b} -r ${A}/${B}/${C}; done
#
#${FIND} /storage-bkp/ -type f -atime +2 |grep -v .snapshot|xargs rm -vf


###########  Funções ################
_erro(){
cat << fim
opção inválida, consulte o help, com as opções --help ou, -h ou, ?.
fim
}
_confTar(){
${FIND} $BKPCONF/${HOSTNAME}_* -exec rm -f {} \; 2> /dev/null;

${FIND} ${FILESTORAGEDIR} -iwholename *etc* -name *.conf -printf '%h %f \n'|while read p f; do ${TAR} rvf ${BKPCONF}/${HOSTNAME}_$(sed 's\/\_\g;s\_client.\\g;s\_etc\\g;s\_server\\g;s\__\_\g' <<< ${p#/opt/}).tar $p/$f 2> /dev/null; done

${FIND} ${FILESTORAGEDIR} -type f ! -iwholename "*Zope*" \( -name "buildout.cfg" -o -name "versions.cfg" -o -name "bootstrap.py" \) -printf '%h %f \n'|while read p f; do ${TAR} rvf ${BKPCONF}/${HOSTNAME}_$(sed 's\/\_\g;' <<< ${p#/opt/}).tar $p/$f 2> /dev/null; done
}
_verifyNFS(){
# Este script verifica o compartilhamento remoto, se não tiver ativo
# ele é montado
        grep -Eo $REMOTEHOST /etc/mtab >> /dev/null
        [ `echo $?` == "1" ] && mount $REMOTEHOST:$REMOTEDIR $LOCALDIR
        mount
}

_repozoBackup(){
if [ ${#REPOZO[*]} -gt 1 ]; then
	${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR; B=$(awk -F/ '{print $4"/"$5}' <<< ${a}); C=${b%.fs}; mkdir -pv ${A}/${B}/${C}; ${FILESTORAGEDIR}/${B}/bin/repozo -BFvzf ${a}/${b} -r ${A}/${B}/${C}; done
else
	${FIND} $FILESTORAGEDIR -type f -iwholename "*var*" -name "*.fs" -printf '%h %f\n'|while read a b; do A=$BACKUPDIR; B=$(awk -F/ '{print $4"/"$5}' <<< ${a}); C=${b%.fs}; mkdir -pv ${A}/${B}/${C}; ${REPOZO} -BFvzf ${a}/${b} -r ${A}/${B}/${C}; done
fi
}
_removeOld(){
${FIND} $BACKUPDIR \( -ctime +${DAYS} -o -atime +${DAYS} -o -mtime +${DAYS} \)|grep -v ${EXCEPTION[0]}|grep -v ${EXCEPTION[1]}|grep -v ${EXCEPTION[2]}|grep -v ${EXCEPTION[3]} |xargs rm -vrf
}
_start(){
_erro;
#_repozoBackup
#_removeOld
}
_stop(){
_erro;
}
_restart(){
_erro
}
_status(){
_erro
}

case $1 in
	start) _start;;
	stop) _stop;;
	status) _status;;
	restart) _restart;;
	-h|--help|?) _help;;
	'') _verifyNFS; 
            _repozoBackup;
	    _confTar;
            _removeOld;;
	*) _erro ;;
esac
